<!--$Id: db_put.so,v 10.60 2007/10/24 16:06:06 bostic Exp $-->
<!--Copyright (c) 1997,2008 Oracle.  All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::put</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td>
<b>Db::put</b>
</td>
<td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a>
<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a></td>
</tr></table>
<hr size=1 noshade>
<tt>
<b><pre>
#include &lt;db_cxx.h&gt;
<p>
int
Db::put(DbTxn *txnid, Dbt *key, Dbt *data, u_int32_t flags);
</pre></b>
<hr size=1 noshade>
<b>Description: Db::put</b>
<p>The Db::put method stores key/data pairs in the database.  The default
behavior of the Db::put function is to enter the new key/data
pair, replacing any previously existing key if duplicates are disallowed,
or adding a duplicate data item if duplicates are allowed.  If the database
supports duplicates, the Db::put method adds the new data value at the
end of the duplicate set.  If the database supports sorted duplicates,
the new data value is inserted at the correct sorted location.</p>
<p>Unless otherwise specified, the Db::put method
either returns a non-zero error value
or throws an exception that encapsulates a non-zero error value on
failure, and returns 0 on success.
</p>
<b>Parameters</b> <br>
 <b>flags</b><ul compact><li>The <b>flags</b> parameter must be set to 0 or
one of the following values:
<br>
<b><a name="DB_APPEND">DB_APPEND</a></b><ul compact><li>Append the key/data pair to the end of the database.  For the
DB_APPEND flag to be specified, the underlying database must be
a Queue or Recno database.  The record number allocated to the record is
returned in the specified <b>key</b>.
<p>There is a minor behavioral difference between the Recno and Queue access
methods for the DB_APPEND flag.  If a transaction enclosing a
Db::put operation with the DB_APPEND flag aborts, the
record number may be decremented (and later reallocated by a subsequent
DB_APPEND operation) by the Recno access method, but will not be
decremented or reallocated by the Queue access method.</p></ul>
<b><a name="DB_NODUPDATA">DB_NODUPDATA</a></b><ul compact><li>In the case of the Btree and Hash access methods, enter the new key/data
pair only if it does not already appear in the database.
<p>The DB_NODUPDATA flag may only be specified if the underlying
database has been configured to support sorted duplicates.  The
DB_NODUPDATA flag may not be specified to the Queue or Recno
access methods.</p>
<p>The Db::put method will return <a href="../api_cxx/dbc_put.html#DB_KEYEXIST">DB_KEYEXIST</a> if DB_NODUPDATA is set and the key/data pair already appears
in the database.
</p></ul>
<b><a name="DB_NOOVERWRITE">DB_NOOVERWRITE</a></b><ul compact><li>Enter the new key/data pair only if the key does not already appear in the
database.  The Db::put method call with the DB_NOOVERWRITE flag
set will fail if the key already exists in the database, even if the database
supports duplicates.
<p>The Db::put method will return <a href="../api_cxx/dbc_put.html#DB_KEYEXIST">DB_KEYEXIST</a> if DB_NOOVERWRITE is set and the key already appears in the
database.
</p></ul>
<br></ul>
 <b>data</b><ul compact><li>The data <a href="../api_cxx/dbt_class.html">Dbt</a> operated on.</ul>
 <b>key</b><ul compact><li>The key <a href="../api_cxx/dbt_class.html">Dbt</a> operated on.</ul>
 <b>txnid</b><ul compact><li>If the operation is part of an application-specified transaction, the
<b>txnid</b> parameter is a transaction handle returned from
<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; if the operation is part of a Berkeley DB Concurrent Data Store group, the
<b>txnid</b> parameter is a handle returned from
<a href="../api_cxx/env_cdsgroup_begin.html">DbEnv::cdsgroup_begin</a>; otherwise NULL.
If no transaction handle is
specified, but the
operation occurs in a transactional
database,
the operation will be implicitly transaction protected.
</ul>
<br>
<a name="2"><!--meow--></a>
<a name="3"><!--meow--></a>
<br><b>Errors</b>
<p>The Db::put method
may fail and throw
<a href="../api_cxx/except_class.html">DbException</a>,
encapsulating one of the following non-zero errors, or return one of
the following non-zero errors:</p>
<br>
<b>DB_REP_HANDLE_DEAD</b><ul compact><li>The database handle has been invalidated because a replication election
unrolled a committed transaction.</ul>
<br>
<br>
<b>DB_REP_LOCKOUT</b><ul compact><li>The operation was blocked by client/master synchronization.</ul>
<br>
<br>
<b>EACCES</b><ul compact><li>An attempt was made to modify a read-only database.</ul>
<br>
<br>
<b>EINVAL</b><ul compact><li>If a record number of 0 was specified;
an attempt was made to add a record to a fixed-length database that was too
large to fit;
an attempt was made to do a partial put;
an attempt was made to add a record to a secondary index; or if an
invalid flag value or parameter was specified.</ul>
<br>
<br>
<b>ENOSPC</b><ul compact><li>A btree exceeded the maximum btree depth (255).</ul>
<br>
<p>If a transactional database environment operation was selected to
resolve a deadlock, the Db::put method will fail and
either return <a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> or
throw a <a href="../api_cxx/deadlock_class.html">DbDeadlockException</a> exception.</p>
<p>If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
to grant a lock in the allowed time, the Db::put method will fail and
either return <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or
throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
<hr size=1 noshade>
<br><b>Class</b>
<a href="../api_cxx/db_class.html">Db</a>
<br><b>See Also</b>
<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<p><font size=1>Copyright (c) 1996,2008 Oracle.  All rights reserved.</font>
</body>
</html>
